package com.wms.data.domain.service.impl;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.wms.data.WmsFrameworkException;
import com.wms.data.dao.impl.SystemUserDaoImpl;
import com.wms.data.domain.service.RoleService;
import com.wms.data.domain.service.SystemUserService;
import com.wms.data.pojo.PageModel;
import com.wms.data.pojo.Role;
import com.wms.data.pojo.SystemUser;
import com.wms.utils.WMSUtil;

// ~ File Information
// ====================================================================================================================

@Service("systemUserService")
public class SystemUserServiceImpl extends
		AbstractServcieImpl<SystemUserDaoImpl, SystemUser, String> implements
		SystemUserService {

	// ~ Static Fields
	// ==================================================================================================================

	// ~ Fields
	// ==================================================================================================================

	@Autowired
	RoleService roleService;

	// ~ Constructors
	// ==================================================================================================================

	// ~ Methods
	// ==================================================================================================================

	@Override
	public SystemUser updateLogin(String userName, String password,
			int unsuccessfulAttemptNum, String ipAddress) {

		try {

			SystemUser user = getDao().findByUserNameAndPwd(userName, password);

			if (user != null) {

				// 判断用户状态
				if (!StringUtils.equals(user.getStatus(), SystemUser.PROP_STATUS_ACTIVE)) {

					throw new WmsFrameworkException("用户被锁定，请联系管理员！");
				}

				// 判断权限
				Role role = roleService.findById(user.getRoleID());

				if (role == null) {

					throw new WmsFrameworkException("用户账号异常，请联系管理员！");
				}

				if (!StringUtils.equals(role.getStatus(), Role.PROP_STATUS_ACTIVE)) {

					throw new WmsFrameworkException("用户被锁定，请联系管理员！");
				}

				// 更新用户
				user.setUnsuccessfulAttemptNum(0L);
				user.setLastLoginDate(new Date());
				user.setLastLoginIP(ipAddress);
				user.setLastLoginIPAddr(WMSUtil.getAddr(ipAddress));

				getDao().update(user);
			}

			return user;
		} catch (WmsFrameworkException wfe) {

			logger.error(wfe);

			throw new WmsFrameworkException(wfe.getMessage());
		} catch (Exception e) {
			
			logger.error(e);

			throw new WmsFrameworkException("UF-1001.login.message.login.fail");
		}
	}

	@Override
	public List<SystemUser> findByPageModel(Map<String, String> parameter,
			PageModel pageModel) {
		
		return null;
	}

	@Override
	public void saveSystemUser(SystemUser systemUser) {

	}

	@Override
	public void saveSystemUserAndRoleId(SystemUser systemUser, Integer roleId) {

	}

	@Override
	public void updateBySystemUserAndRoleId(SystemUser systemUser, Integer roleId) {

	}

	@Override
	public void deleteBySystemUser(SystemUser systemUser) {
		super.delete(systemUser);
	}
	
	@Override
	public void deleteById(String id) {
		
		SystemUser systemUser = new SystemUser();
		systemUser.setId(id);
		
		super.delete(systemUser);
	}

	@Override
	public void deleteBySystemUserAndRoleId(SystemUser systemUser, Integer roleId) {

		// TODO Auto-generated method stub

	}

	@Override
	public SystemUser findUserByUserName(String userName) {

		// TODO Auto-generated method stub
		return null;
	}
}